/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package newMenu;

import Estats.EstatAvion1;
import Estats.EstatAvion2;
import Estats.EstatAvion3;
import Estats.EstatControles;
import Estats.EstatDificultad;
import Estats.EstatEstadistiques;
import Estats.EstatFinalPantalla;
import Estats.EstatIdioma;
import Estats.EstatIntro;
import Estats.EstatLoading;
import Estats.EstatMenuPrincipal;
import Estats.EstatMuerte;
import Estats.EstatMusica;
import Estats.EstatPerfil;
import Estats.EstatSortir;
import Estats.EstatSortirCat;
import Estats.EstatSortirEng;
import factoryTotal.EstatJuego0;
import factoryTotal.EstatJuego1;
import factoryTotal.EstatJuego2;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.loading.LoadingList;
import org.newdawn.slick.state.StateBasedGame;

/**
 * Creamos una classe que extendera de StateBasedGame, Juego basado en estados.
 * Hemos de sobreecribir initStatesList
 * @author Raul Delgado Astudillo i Xavier pol Sevilla
 */
public class PrincipalGame extends StateBasedGame {

    /**
     * Constructor amb un unic parametre
     * @param titol String que es mostrara en la finestra de l'aplicacio (si n'hi ha)
     */
    public PrincipalGame(String titol) {
        super(titol);
    }

    /**
     * Aquest metode ha de ser implementat per totes les classes que extenguin de StateBasedGame
     * Indiquem al motor que s'han de carregar els recursos mes tard (EstatLoading)
     * Activem el Manager de recursos per poguer disposar d'imatges i sons
     * Afegim els diferents estats que em creat a la llista pertinent
     * @param container
     * @throws SlickException
     */
    @Override
    public void initStatesList(GameContainer container) throws SlickException {
        // Es carregaran els recursos en diferit
        LoadingList.setDeferredLoading(true);
        // S'activa el manager de recursos
        ManagerRecursos.init();
        // S'afegeixen els diferents estats del jocs
        // Estat amb la intro del joc
        addState(new EstatIntro());
        // Estat on es carreguen els recursos
        addState(new EstatLoading());
        // Estat on es tria el perfil amb el que es vol jugar
        addState(new EstatPerfil());
        //Estate Idioma
        addState(new EstatIdioma());
        // Estat menu principal
        addState(new EstatMenuPrincipal());
        // Estat Seleccio avio 1
        addState(new EstatAvion1());
        // Estat Seleccio avio 2
        addState(new EstatAvion2());
        // Estat Seleccio avio 3
        addState(new EstatAvion3());
        // Estat estadistiques
        addState(new EstatEstadistiques());
        // Estat seleccion dificultad
        addState(new EstatDificultad());
        // Estat on es mostren els controls del avió
        addState(new EstatControles());
        // Estat opcions musica
        addState(new EstatMusica());
        // Estat on es confirma la sortida a l'escriptori ESP
        addState(new EstatSortir());
        // Estat on es confirma la sortida a l'escriptori CAT
        addState(new EstatSortirCat());
        // Estat on es confirma la sortida a l'escriptori ENG
        addState(new EstatSortirEng());
        //Estado del juego nivel 1
        addState(new EstatJuego0());
        //Estado del juego nivel 2
        addState(new EstatJuego1());
        //Estado del juego nivel 3
        addState(new EstatJuego2());
        //Estado el usuario ha perdido todas las vidas
        addState(new EstatMuerte());
        //Estat Final Pantalla, estadistiques del nivell
        addState(new EstatFinalPantalla());

    }

    @Override
    public boolean closeRequested() {
        return false;
    }
}
